#!/usr/bin/env bash
set -euo pipefail

function app_realpath() {
	SOURCE=$1
	while [ -h "$SOURCE" ]; do
		DIR=$(dirname "$SOURCE")
		SOURCE=$(readlink "$SOURCE")
		[[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE
	done
	SOURCE_DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
	echo "${SOURCE_DIR%%${SOURCE_DIR#*.app}}"
}

APP_PATH="$(app_realpath "${BASH_SOURCE[0]}")"
if [ -z "$APP_PATH" ]; then
	echo "Unable to determine Orca.app path from symlink: ${BASH_SOURCE[0]}"
	exit 1
fi

CONTENTS="$APP_PATH/Contents"
# El binario dentro del bundle se llama como `productName`. Se prueban los
# candidatos en vez de fijar uno, para que un cambio de nombre no vuelva a
# dejar la CLI muerta sin que nadie se entere.
ELECTRON=""
for candidate in "Nexgen Code" Nexgen Code; do
	if [ -x "$CONTENTS/MacOS/$candidate" ]; then
		ELECTRON="$CONTENTS/MacOS/$candidate"
		break
	fi
done
if [ -z "$ELECTRON" ]; then
	echo "Unable to locate the Nexgen Code executable in $CONTENTS/MacOS" >&2
	exit 1
fi
# Why: Nexgen Code packages the CLI entrypoint outside app.asar so the public shell
# command can execute it directly with ELECTRON_RUN_AS_NODE, mirroring VS Code's
# launcher model instead of requiring a separate npm-distributed binary.
CLI="$CONTENTS/Resources/app.asar.unpacked/out/cli/index.js"

export ORCA_NODE_OPTIONS="${NODE_OPTIONS-}"
export ORCA_NODE_REPL_EXTERNAL_MODULE="${NODE_REPL_EXTERNAL_MODULE-}"
unset NODE_OPTIONS
unset NODE_REPL_EXTERNAL_MODULE

ELECTRON_RUN_AS_NODE=1 exec "$ELECTRON" "$CLI" "$@"
